// redis管道操作
// 批量发送命令，减少网络传输次数，提升效率

#include <iostream>
#include <hiredis/hiredis.h>

int main()
{
    struct timeval timeout = {
        .tv_sec = 1,      // 1秒
        .tv_usec = 500000 // 微秒
    };
    redisContext *ctx = redisConnectWithTimeout("localhost", 6379, timeout);
    if (ctx == NULL || ctx->err)
    {
        if (ctx)
        {
            std::cout << "连接失败:" << ctx->err << std::endl;
            redisFree(ctx); // 释放连接
        }
        else
        {
            std::cout << "内存分配失败" << std::endl;
        }
        return 1;
    }
    else
    {
        std::cout << "连接redis成功" << std::endl;
    }

    // 开启管道模式
    redisAppendCommand(ctx, "set a 1");
    redisAppendCommand(ctx, "set b 2");
    redisAppendCommand(ctx, "get a");

    // 一次获取响应
    redisReply *reply;
    // 处理第一个响应 set a 1
    redisGetReply(ctx, (void **)&reply);
    freeReplyObject(reply);

    // 处理第二个响应 set b 2
    redisGetReply(ctx, (void **)&reply);
    freeReplyObject(reply);

    // 处理第三个响应 get a
    redisGetReply(ctx, (void **)&reply);
    std::cout<<"get a结果:"<<reply->str<<std::endl;
    freeReplyObject(reply);
    // 释放连接
    redisFree(ctx);
    return 0;
}